#ifndef BASE_H
#define BASE_H

#include <QString>
#include <QList>
#include <QPair>
#include <QFile>

#include "config.h"

namespace Chess {       // 前置声明
    class Message;
    class Class;
}

namespace Base {        // 该名字空间负责掌管基类

    class Base_pieces {     // Base_pieces是棋子子力的基类
    public:
        const auto& const_pieces() const { return pieces; }
    protected:
        auto& avail_pieces() { return pieces; }
        void set_chess(const QString& name, int count);
        bool contains(QChar chess, int count) const;
    private:
        QList<QPair<QChar,int>> pieces;
    };

    class Base_table {      // Base_table是表格基类
    public:
        explicit Base_table(const QString& pre, const QString& end) : pre_code{read_all(pre)}, end_code{read_all(end)} { }
        QString html() const;       // 转为html代码
        void append(Chess::Message&& message);      // 加入一条残局信息
        void append_class(Class_enum type, QList<Chess::Message>&& list);       // 加入一类残局信息。type必须是尚未加入的类别，list必须全部属于该类别
    protected:
        static QString read_all(const QString& file_name);      // 读取文件全部内容
        auto& avail_classes() { return classes; }
        const auto& const_classes() const { return classes; }
    private:
        QString pre_code;
        QString end_code;
        QList<Chess::Class> classes;
    };

}

#endif // BASE_H
